import java.util.Arrays;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 高生平
 * Date: 2025-09-14
 * Time: 15:43
 */
public class Test {
    public static int[] onlyOnce (int[] nums) {
        //1.先所有元素异或起来
        int xor = nums[0];
        for (int i = 1; i < nums.length; i++) {
            xor ^= nums[i];
        }

        //2.在找到异或后的二进制任意一个位1的位
        int bit = 1;
        while((bit & xor) == 0) { //如果是0，左移一位
            bit <<= 1;
        }

        //3.分组异或，此位是1的分为一组，是0的分为一组，两组各自内部进行异或
        int num1 = 0;
        int num2 = 0;
        for (int x : nums) {
            if ((x & bit) == 1) { //该位是1的
                num1 ^= x;
            } else { //该位是0的
                num2 ^= x;
            }
        }
        return new int[] {num1, num2};
    }
    public static void main(String[] args) {
        int[] nums = {1, 1, 2, 2, 3, 4, 5, 5};
        System.out.println(Arrays.toString(onlyOnce(nums)));
    }
}
